package modelos;

import java.sql.*;
import java.io.*;
import java.text.DateFormat;
import java.util.*;

public class Revista {

    private Connection conn;
    private Statement stmt;
    private int idRevista;
    private int version;
    private String fechaInicio;
    private String fechaPublicacion;
    private float costo;
    private String nombre;
    private LinkedList<Articulo> articulos;
    private String cartaEditor;

    public Revista() {
        try {
            String userName = "root";
            String password = "";
            String url = "jdbc:mysql://localhost:3306/seng";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(url, userName, password);
            stmt = conn.createStatement();
        } catch (Exception e) {
            System.out.println("Cannot connect to database server");
        }
    }

    public String getCartaEditor() {
        return cartaEditor;
    }

    public void setCartaEditor(String cartaEditor) {
        this.cartaEditor = cartaEditor;
    }
    
    public LinkedList getTitulos() {
        LinkedList titulos = new LinkedList();

        try {
            stmt.executeQuery("SELECT nombre, id_revista FROM REVISTA WHERE fecha_publicacion IS NULL");
            ResultSet rs = stmt.getResultSet();
            while (rs.next()) {
                titulos.add(rs.getString("nombre"));
                titulos.add(rs.getString("id_revista"));
            }
            rs.close();
            return (titulos);
        } catch (SQLException e) {
            System.out.println("Cannot getNombres()" + e);
        }

        return titulos;
    }

    public void agregar() {
        try {
            String s = "INSERT INTO Revista (version, fecha_inicio, costo, nombre, carta_editor)"
                    + " VALUES ('1' , now(),'" + costo + "','"+nombre+"','"+cartaEditor+"')";
            System.out.println(s);
            stmt.executeUpdate(s);
        } catch (Exception e) {
            System.out.println("Cannot update database" + e);
        }
    }
    
    public boolean publicaRevista(int idRevista){
        try {
            String s = "UPDATE Revista SET fecha_publicacion = NOW() WHERE id_revista = " + idRevista;
            stmt.executeUpdate(s);
            return true;
        } catch (Exception e) {
            System.out.println("Cannot update database" + e);
            return false;
        }
    } 

    public LinkedList<Revista> getRevistas() {
        LinkedList<Revista> revistas = new LinkedList<Revista>();

        try {
            stmt.executeQuery("SELECT id_revista, version, fecha_inicio, costo, nombre FROM Revista WHERE fecha_publicacion IS NULL");
            ResultSet rs = stmt.getResultSet();
            Articulo articulo = new Articulo();
            int ultimoId = -1;
            while (rs.next()) {
                Revista revista = new Revista();
                revista.setIdRevista(rs.getInt("id_revista"));
                revista.setVersion(rs.getInt("version"));
                revista.setFechaInicio(DateFormat.getInstance().format(rs.getTimestamp("fecha_inicio")));
                revista.setCosto(rs.getFloat("costo"));
                revista.setNombre(rs.getString("nombre"));
                revista.setArticulos(new Articulo().getArticulosDeRevista(revista.idRevista));
                revistas.add(revista);
            }
            rs.close();
            return (revistas);
        } catch (SQLException e) {
            System.out.println("Cannot getArticulos() " + e);
        }
        return revistas;
    }

    public void setIdRevista(int valor) {
        idRevista = valor;
    }

    public int getIdRevista() {
        return idRevista;
    }

    public void setVersion(int valor) {
        version = valor;
    }

    public int getVersion() {
        return version;
    }

    public void setFechaInicio(String valor) {
        fechaInicio = valor;
    }

    public String getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaPublicacion(String valor) {
        fechaPublicacion = valor;
    }

    public String getFechaPublicacion() {
        return fechaPublicacion;
    }

    public void setCosto(float valor) {
        costo = valor;
    }

    public float getCosto() {
        return costo;
    }

    public void setNombre(String valor) {
        nombre = valor;
    }

    public String getNombre() {
        return nombre;
    }

    public LinkedList<Articulo> getArticulos() {
        return articulos;
    }

    public void setArticulos(LinkedList<Articulo> articulos) {
        this.articulos = articulos;
    }

    public void agregarArticulo(Articulo articulo) {
        if (articulos == null) {
            articulos = new LinkedList<Articulo>();
        }
        articulos.add(articulo);
    }
}